import { easing } from "./easing";
import { Quaternion } from "../../core/math/Quaternion";
function linear(t,s,e,d,tween="none"){
    let nt=t/d;
    nt=easing[tween](nt);
    let r;
    if(Array.isArray(s)){
        const l=s.length;
        r=new Array(l);
        for(let i=0;i<l;i++){
            r[i]=(e[i]-s[i])*nt+s[i];
        }
    }else{
        r=(e-s)*nt+s;
    }
    return r;
    
}
function cubi(t,s,e,d,tween="none"){

}
function step(t,s,e,d,tween="none"){
    let nt=t/d;
    nt=easing[tween](nt);
    let tt=nt<1?0:1;
    return s+e*tt;
}

function quatStep(t,s,e,d,tween="none"){

}
function quatLinear(t,s,e,d,tween="none"){
    let nt=t/d;
    nt=easing[tween](nt);
    const result = new  Quaternion();
    result.slerpQuaternions( new Quaternion(...s),new Quaternion(...e),t)
    // quat.slerp(result, s, e, t);
    return result;
}
function quatCubi(t,s,e,d,tween="none"){
    
}
/**
 * 动画管理类。可选一下四种动画方式
 * 1. tween["STEP"] 关键步。
 * 2. tween["LINEAR"] 线性插值。
 * 3. tween["CUBICSPLINE"] 三次样条插值。
 * 4. tween["QUATLINEAR"] 四元数的插值。
 * @class
 */
const tween={
    "STEP":step,
    "LINEAR":linear,//线性插值
    "CUBICSPLINE":cubi,//三次样条插值
    "QUATLINEAR":quatLinear,//四元数的插值
}
export {tween}